Computer busses such as the PCI bus and J-Bus, multiplex the address and data onto a common bus. The address is presented for one clock cycle followed by the data on the next clock cycle. This has the advantage of halving the number of connections needed when compared with a non-multiplexed bus. For example, the PCI bus is a 32-bit bus with 32 data lines for communicating 32-bit words between devices connected to the bus. If the PCI bus did not multiplex address and data, there would need to be 32 lines for both data and address, making a total of 64 lines. Such a non-multiplexed bus would be relatively costly to implement, and would require a more complex system board.
To achieve fast data transfer on a multiplexed bus, ‘burst’ transfers are used. This involves a single address word ‘A’ followed by one or more data words where the first data word ‘D0’ is the data for address ‘A’, the second data word ‘D1’ is the data for address ‘A+1’, ‘D2’ is the data for address ‘A+2’, and so on. Each transaction therefore consists of an address phase followed by a data phase. Such a protocol for transferring data is known as “direct addressing”, and devices that use this are called “direct address” devices. Direct address devices automatically increment the address for each sequential data word during the transfer of a block of data.
If a direct address burst is terminated before the data transfer is complete, when the burst resumes there must be a new address cycle giving the address of the next data word as shown below.
Certain devices which may be connected to a bus using address/data multiplexing, use a different protocol for communicating data to or from the bus. These devices are known as “indirect address devices” and use a protocol called “indirect addressing”, in which an address value is loaded in a first transaction into an “address register” of the device. The data is then loaded in a second transaction into a data register which may be a burst transaction of data into the data register. Indirect address devices automatically increment the address for each sequential data word during the transfer of a block a data. Thus this whole process involves two separate transactions across the bus to the memory of the indirect address device.
An advantage of indirect addressing is that it permits a much larger address space to be accessed within an indirect address device, whilst occupying a much smaller area of address space on the bus.
It is possible to access an indirect address device across a direct address bus by communicating sequentially two direct address transactions. During the address phase of the first transaction, the address of the address register is presented onto the bus, then during the data phase the address value is loaded into the address register. In the second transaction, the address of the data register is presented onto the bus during the address phase, followed one or more sequential data words loaded into the data register during the data phase loads.
Although it is possible to use an indirect address device on a direct address bus, there are two main problems that make it difficult in practice to integrate an indirect address device with a direct address bus. The first of these is that if there are other devices connected to the bus which may communicate with the indirect address device, then these other devices may attempt to access the indirect address device in between the two sequential direct address transactions needed to complete the indirect address transaction. The second problem is that some direct address devices do not have the capability to perform two sequential direct address transactions to communicate with an indirect address device. Although it is in principle possible to devise a bus control system to avoid such problems, existing hardware and software for many applications will have to be completely redesigned to ensure that direct address devices can reliably communicate with indirect address devices using two sequential direct address transactions.